home *** CD-ROM | disk | FTP | other *** search
- #include "main.h"
- #include "protos.h"
- #include "text.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <proto/graphics.h>
- #include <proto/gadtools.h>
- #include <intuition/gadgetclass.h>
- #include <proto/intuition.h>
- #include <intuition/intuition.h>
- #include <string.h>
-
- extern struct Library *GadToolsBase;
- extern struct IntuitionBase *IntuitionBase;
- extern UWORD Correction;
-
- extern struct Window *Fenetre;
- extern struct RastPort *Rastport;
- extern ULONG idcmp;
- extern UWORD CoorX[XMAX+1],CoorY[YMAX+1];
- UBYTE ListeCoup[XMAX*YMAX+1];
- extern struct Gadget *Gadget[NBGADGETS];
-
- extern UBYTE CoupX[10];
- UBYTE prof_max;
- extern ptrtab terrain;
- extern ULONG Positions;
-
- extern UBYTE NiveauCourant;
- short Evaluation,Debute;
-
- UBYTE JJoue(void)
- {
- if(terrain->colonnes[CoupX[1]+GAGNE]!=YMAX+GAGNE)
- {
- terrain->jeu[CoupX[1]+GAGNE][terrain->colonnes[CoupX[1]+GAGNE]++]=JOUEUR;
- ListeCoup[ListeCoup[0]++]=CoupX[1];
- #ifdef DEB
- printf("%d\n",EvalTab(terrain));
- #endif
- return(1);
- }
- return(0);
- }
-
- void OJoue(void)
- {
- struct TagItem tk[]={GA_Disabled,1,TAG_DONE};
-
- ModifyIDCMP(Fenetre,IDCMP_GADGETUP|IDCMP_RAWKEY);
- GT_SetGadgetAttrsA(Gadget[0],Fenetre,NULL,tk);
- GT_SetGadgetAttrsA(Gadget[2],Fenetre,NULL,tk);
- GT_SetGadgetAttrsA(Gadget[4],Fenetre,NULL,tk);
- GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
- tk[0].ti_Data=0;
- GT_SetGadgetAttrsA(Gadget[3],Fenetre,NULL,tk);
- RefreshGList(Gadget[0],Fenetre,NULL,1);
- RefreshGList(Gadget[2],Fenetre,NULL,4);
- prof_max=NiveauCourant;
- if((ListeCoup[0]>=((XMAX*YMAX<<1)/3))&&(prof_max==4))
- prof_max=6;
- Positions=0;
- Evaluation=GenCoups(-INFINI);
- #ifdef DEB
- puts("coucou");
- #endif
- if(Evaluation==QUIT)
- do
- CoupX[1]=(rand()%XMAX)+GAGNE;
- while(terrain->colonnes[CoupX[1]]==YMAX+GAGNE);
- terrain->jeu[CoupX[1]][terrain->colonnes[CoupX[1]]++]=ORDINATEUR;
- #ifdef DEB
- printf("%d\n",EvalTab(terrain));*/
- #endif
- CoupX[1]-=GAGNE;
- ListeCoup[ListeCoup[0]++]=CoupX[1];
- tk[0].ti_Data=1;
- GT_SetGadgetAttrsA(Gadget[3],Fenetre,NULL,tk);
- tk[0].ti_Data=0;
- GT_SetGadgetAttrsA(Gadget[0],Fenetre,NULL,tk);
- GT_SetGadgetAttrsA(Gadget[2],Fenetre,NULL,tk);
- GT_SetGadgetAttrsA(Gadget[4],Fenetre,NULL,tk);
- GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
- RefreshGList(Gadget[0],Fenetre,NULL,1);
- RefreshGList(Gadget[2],Fenetre,NULL,4);
- ModifyIDCMP(Fenetre,idcmp);
- }
-
- void Commence(void)
- {
- char msg[80];
-
- while(ListeCoup[0]!=1)
- Retour();
- ModifyIDCMP(Fenetre,idcmp);
- Clear(terrain);
- if((rand()>>1)&1)
- {
- Affiche(MSG1);
- Debute=JOUEUR;
- }
- else
- {
- Affiche(MSG2);
- Debute=ORDINATEUR;
- CoupX[1]=rand()%XMAX;
- terrain->jeu[CoupX[1]+GAGNE][terrain->colonnes[CoupX[1]+GAGNE]++]=ORDINATEUR;
- ListeCoup[ListeCoup[0]++]=CoupX[1];
- MAJ(3);
- sprintf(msg,MSG3,CoupX[1]+1);
- Affiche(msg);
- }
- }
-
- void Souris(void)
- {
- char msg[80];
- struct TagItem tk[]={GA_Disabled,0,TAG_DONE};
-
- if((Fenetre->GZZMouseY>(CI+7))&&(Fenetre->GZZMouseY<((CC+13)*Correction))&&(Fenetre->GZZMouseX>(VS+2))&&(Fenetre->GZZMouseX<(Fenetre->BorderLeft+VS+2+XMAX*TN)))
- {
- CoupX[1]=(Fenetre->GZZMouseX-(VS+2+Fenetre->BorderLeft))/TN;
- if(JJoue())
- {
- if(ListeCoup[0]==1)
- {
- GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
- RefreshGList(Gadget[5],Fenetre,NULL,1);
- }
- MAJ(2);
- if(TestTab(terrain,JOUEUR))
- {
- ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
- Affiche(MSG4);
- Arrete();
- return;
- }
- if(ListeCoup[0]==XMAX*YMAX+1)
- {
- ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
- Affiche(MSG5);
- Arrete();
- return;
- }
- if(ListeCoup[0]==2)
- {
- CoupX[1]=rand()%XMAX;
- CoupX[1]=4;
- terrain->jeu[CoupX[1]+GAGNE][terrain->colonnes[CoupX[1]+GAGNE]++]=ORDINATEUR;
- ListeCoup[ListeCoup[0]++]=CoupX[1];
- MAJ(3);
- sprintf(msg,MSG12,CoupX[1]+1);
- }
- else
- {
- Affiche(MSG2);
- OJoue();
- MAJ(3);
- if(TestTab(terrain,ORDINATEUR))
- {
- ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
- sprintf(msg,MSG7,CoupX[1]+1);
- Affiche(msg);
- Arrete();
- return;
- }
- if(ListeCoup[0]==XMAX*YMAX+1)
- {
- ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
- sprintf(msg,MSG5);
- Affiche(msg);
- Arrete();
- return;
- }
- if(Evaluation==QUIT)
- sprintf(msg,MSG12,CoupX[1]+1);
- else
- if(Evaluation>VICTOIRE-20)
- sprintf(msg,MSG9,CoupX[1]+1,(VICTOIRE-1-Evaluation));
- else
- if(Evaluation<20-VICTOIRE)
- if(Evaluation==-VICTOIRE)
- sprintf(msg,MSG10,CoupX[1]+1);
- else
- sprintf(msg,MSG11,CoupX[1]+1,(VICTOIRE-1+Evaluation));
- else
- if(prof_max!=1)
- sprintf(msg,MSG13,CoupX[1]+1,CoupX[2]-GAGNE+1,Positions,Evaluation);
- else
- sprintf(msg,MSG12,CoupX[1]+1);
- }
- Affiche(msg);
- }
- }
- }
-
- void MAJ(char Flag)
- {
- UBYTE i;
-
- SetAPen(Rastport,Flag);
- for(i=4;i<=TN-10;i+=2)
- DrawEllipse(Rastport,CoorX[CoupX[1]],CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE],i>>1,(i>>(3-Correction)));
- }
-
- void Arrete(void)
- {
- struct TagItem tk[]={GA_Disabled,1,TAG_DONE};
-
- GT_SetGadgetAttrsA(Gadget[3],Fenetre,NULL,tk);
- RefreshGList(Gadget[3],Fenetre,NULL,1);
- }
-
- void Retour(void)
- {
- struct TagItem tk[]={GA_Disabled,1,TAG_DONE};
-
- ModifyIDCMP(Fenetre,idcmp);
- Affiche("");
- SetAPen(Rastport,0);
- if((!TestTab(terrain,JOUEUR))&&((ListeCoup[0]!=XMAX*YMAX+1)||(Debute==JOUEUR)))
- {
- CoupX[1]=ListeCoup[--ListeCoup[0]];
- RectFill(Rastport,CoorX[CoupX[1]]-(TN>>1)+1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]-(TN>>2)*Correction+1,CoorX[CoupX[1]]+(TN>>1)-1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]+(TN>>2)*Correction-1);
- terrain->jeu[CoupX[1]+GAGNE][--terrain->colonnes[CoupX[1]+GAGNE]]=RIEN;
- if(ListeCoup[0]==1)
- {
- GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
- RefreshGList(Gadget[5],Fenetre,NULL,1);
- return;
- }
- }
- CoupX[1]=ListeCoup[--ListeCoup[0]];
- RectFill(Rastport,CoorX[CoupX[1]]-(TN>>1)+1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]-(TN>>2)*Correction+1,CoorX[CoupX[1]]+(TN>>1)-1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]+(TN>>2)*Correction-1);
- terrain->jeu[CoupX[1]+GAGNE][--terrain->colonnes[CoupX[1]+GAGNE]]=RIEN;
- if(ListeCoup[0]<3)
- {
- GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
- RefreshGList(Gadget[5],Fenetre,NULL,1);
- }
- }
-